﻿using System;
using System.Collections.Generic;
using System.Text;

namespace RAP.Framework.Libary.DataSource.Model.Attribute
{
    /// <summary>
    /// 实体模型懒加载属性，如果是对模型的属性进行懒加载，需要慎重考虑，因为属性不支持异步async；
    /// 需要被懒加载的属性或函数必须标记为：virtual；
    /// 默认懒加载的数据会被当前实体缓存，如果不需要缓存，将Cache=false。
    /// </summary>
    [AttributeUsage(AttributeTargets.Class| AttributeTargets.Method | AttributeTargets.Property )]
    public class LazyloadAttribute : System.Attribute
    {
        /// <summary>
        /// 
        /// </summary>
        /// <param name="templateId">查询数据的模板Id，默认使用函数/属性名称作为模板名称</param>
        /// <param name="resultAlias">获取结果集时的别名，默认使用函数/属性名称作为别名</param>
        /// <param name="cache">是否缓存懒加载的数据，缓存周期与当前实体的生存周期一致</param>
        public LazyloadAttribute ( string templateId = null, string resultAlias = null, bool cache = true )
        {
            TemplateId = templateId;
            ResultAlias = resultAlias;
            Cache = cache;
        }

        /// <summary>
        /// 进行数据查询的SQL模板Id
        /// </summary>
        public string TemplateId { get; set; }

        /// <summary>
        /// 需要获取数据的结果集别名
        /// </summary>
        public string ResultAlias { get; set; }

        /// <summary>
        /// 是否将懒加载的数据缓存
        /// </summary>
        public bool Cache { get; set; } = true;
    }
}
